const deleteDuplicates = function(head) {
  // 极端情况： 0个或1个节点， 则不会重复， 直接返回
  if (!head || !head.next) {
    return head
  }

  // dummy
  let dummy = new ListNode()
  // dummy永远指向头节点
  dummy.next = head
  // cur从dummy 开始遍历
  let cur = dummy

  // 当cur的后面至少有两个节点时
  while (cur.next && cur.next.next) {
    // 对cur后面的两个节点进行比较
    if (cur.next.val === cur.next.next.val) {
      // 若值重复，则记下这个值
      let val = cur.next.val
      // 反复地排查后面的元素是否存在多次重复值的情况
      while (cur.next && cur.next.val === val) {
        // 若有，则删除
        cur.next = cur.next.next
      }
    } else {
      // 若不重复，则正常遍历
      cur = cur.next
    }
  }
  // 返回链表的起始节点
  return dummy.next
}